/**
 * $version:  0.1 
 * $Date: 2012-03-19 
 *
 * Copyright (C) 2010-2011 Jawa Software. All rights reserved.
 *
 */

package org.jawa.core.container;

import java.io.File;

/**
 * 插件接口. JAWA框架插件增强功能. :<ul>
 *
 * </ul>
 *
 * 插件目录结构形式. 
 * 打包成JAR、WAR的插件文件会自动解压到相应的目录中. 
 * 一个插件目录应具有以下结构:
 *
 * <pre>[pluginDir]
 *    |-- plugin.xml
 *    |-- classes/
 *    |-- lib/</pre>
 *
 * classes和lib两个目录为可选
 * classes中的所有文件以及lib目录中的JAR文件都将添加到插件的classpath中
 * <tt>plugin.xml</tt>文件在插件模块中是必须的，并且要明确说明<tt>Plugin</tt>的实现类名
 * <tt>plugin.xml</tt>文件应该类似如下 XML:
 *
 * <pre>
 * &lt;?xml version="1.0" encoding="UTF-8"?&gt;
 * &lt;plugin&gt;
 *     &lt;class&gt;org.example.YourPlugin&lt;/class&gt;
 *     &lt;name&gt;Example Plugin&lt;/name&gt;
 *     &lt;description&gt;This is an example plugin.&lt;/description&gt;
 *     &lt;author&gt;Foo Inc.&lt;/author&gt;
 *     &lt;version&gt;1.0&lt;/version&gt;
 *     &lt;minServerVersion&gt;3.0.0&lt;/minServerVersion&gt;
 *     &lt;licenseType&gt;gpl&lt;/licenseType&gt;
 * &lt;/plugin&gt;</pre>
 * <p/>
 * 每个插件将在自己的类加载器加载，除非是在父插件配置文件中配置
 *
 * 请参阅 插件开发指南 (JAWA框架提供插件开发文档)有关插件开发的更多细节.
 *
 */
public interface Plugin {

    /**
     * 初始化插件.
     *
     * @param manager 插件管理器.
     * @param pluginDirectory 插件目录.
     */
    public void initializePlugin(PluginManager manager, File pluginDirectory);

    /**
     * 卸载插件.
     * <p>释放当前插件使用的数据库,网络以及其它资源</p>.
     */
    public void destroyPlugin();

}